package request

import (
	"google.golang.org/protobuf/proto"
)

const key = "#123456!"

// Crypt 按位取反加解密
// len: 数据体data的长度
// data： 数据体
// key：盐值加密串
func Crypt(len int, data []byte, keys []byte) {
	for _, k := range keys {
		if int(k) < len {
			data[k] = ^data[k]
		}
	}
}

func Unmarshal(data []byte, params proto.Message) error {
	if len(data) != 0 {
		Crypt(len(data), data, []byte(key))
	}
	err := proto.Unmarshal(data, params)
	if err != nil {
		return err
	}
	return nil
}

func Marshal(params proto.Message) ([]byte, error) {
	data, err := proto.Marshal(params)
	if err != nil {
		return nil, err
	}
	if len(data) != 0 {
		Crypt(len(data), data, []byte(key))
	}
	return data, nil
}
